\section{Ejercicio 4: \textit{movimientosPosibles}}
\subsection{Enunciado}
Definir la funci\'on
\texttt{ 
\\movimientosPosibles :: Juego $\to$ [(Movimiento,Juego)]
}
\\que devuelva la lista de todos los movimientos v\'alidos que se pueden realizar en el juego dado,
acompa\~nados del estado que resulta al efectuar ese movimiento.
\\Considerando los siguientes tipos:
\texttt{
\\data Arbol a = Nodo a [Arbol a]
\\type ArbolJugadas = Arbol ([Movimientos] ,Juego)
}
\\el m\'odulo Damas ya provee la funci\'on: \texttt{arbolDeJugadas :: Juego $\to$ ArbolJugadas}
que devuelve el arbol de juegos alcanzables mediante movimientos v\'alidos, comenzando desde
el juego dado. Cada nodo del \'arbol consta de un juego, acompa\~nado por la lista de movimientos
que se deberan realizar desde la ra\'iz del arbol para alcanzar dicho estado. (En la ra\'iz del
\'arbol, la lista de movimientos es vac\'ia). Notar que el \'arbol generado por esta funci\'on es
infinito.
\subsection{Codigo}
\scriptsize\begin{verbatim}

 movimientosPosibles :: Juego -> [(Movimiento, Juego)]
 movimientosPosibles (J c t) = map (\(m, Just j) -> (m,j))  
                                                     (filter (\(m, j1) -> not(isNothing j1))
                                                     [(m, mover m (J c t) ) | 
                                                     --itero todas las fichas de un color
                                                     p<-(fichas t c),	
                                                     --construyo un movimiento
                                                     m<- [M p TL,  M p TR,  M p BL,  M p BR] ] )
 
 fichas :: Tablero -> Color -> [Posicion]
 fichas t c = [ (i,j) | i <- ['a'..'h'], j <- [1..8], 
                    (not (isNothing (contenido (i,j) t))) && 
                    (color (dameFicha (contenido (i,j) t)) == c) ]

\end{verbatim}
\normalsize



